(function(){
    /**
     * 以abstract开头的类是抽象类
     *  抽象类和其他类区别不大，只是不能用来创建对象，不能创建实例
     * 
     *  抽象类就是专门用来被继承的
     */
    abstract class Animals {
        // name:string
        age:number

        sayHello(name:string) {
            // console.log(name)
            return name
        }
        constructor(age:number) {
            this.age = age
        }
        // 以abstract 修饰的方法,在子类继承的方法必须重写
        abstract sayHi():void
    }
    class Dog extends Animals{
        name:string
        // 继承的时候。如果子类写constructor,必须写super 
        constructor(name:string,age:number) {
            super(age)
            this.name = name
        }

        sayHello() {
            // age:number = 1
           return super.sayHello('汪汪')
        }
        sayHi() {
            return '狗狗'
        }
    }



    
    const dog = new Dog('旺财',10)
    console.log(dog);
    console.log(dog.sayHello());
    console.log(dog.sayHi());
    


})()